<?php
	class Tarea extends Model {
		public static $_id_column = 'idTarea';
		
		public function cliente() {
        	return $this->belongs_to('cliente','idCliente');
    	}
		
		public function tipoTarea() {
        	return $this->belongs_to('tipoTarea','idTipoTarea');
    	}
		
		public function tecnico() {
        	return $this->belongs_to('tecnico','idTecnico');
    	}
		
		public function estadoTarea() {
        	return $this->belongs_to('estadotarea','idEstadoTarea');
    	}
		
		public static function diaSemana($ano,$mes,$dia){
			// 0->domingo	 | 6->sabado
			$dia= date("w",mktime(0, 0, 0, $mes, $dia, $ano));
				return $dia;
		}
		
		
		public static function compara_fechas($fecha1,$fecha2) {
				
			if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha1))
				list($dia1,$mes1,$año1)=explode("/",$fecha1);
            
			if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha1))
                list($dia1,$mes1,$año1)=explode("-",$fecha1);
        
        	if (preg_match("/[0-9]{1,2}\/[0-9]{1,2}\/([0-9][0-9]){1,2}/",$fecha2))
            	list($dia2,$mes2,$año2)=explode("/",$fecha2);
            
			if (preg_match("/[0-9]{1,2}-[0-9]{1,2}-([0-9][0-9]){1,2}/",$fecha2))
                list($dia2,$mes2,$año2)=explode("-",$fecha2);
        		
				$año1 =substr($año1, 0,4);
				$año2 =substr($año2, 0,4);
				
        		$dif = mktime(0,0,0,$mes1,$dia1,$año1) - mktime(0,0,0, $mes2,$dia2,$año2);
        
        return ($dif);                         
        }
		
		
		public static function listar($idEmpresa){
			//listar clientes por empresa
			$clientes = Cliente::listar($idEmpresa);
			$idClientes = new  stdClass();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			if(count($clientes) == 0){
				$idClientes[$i]= 0;
				$i++;
			}
			if(count($clientes) == 0){
				return array();
			}
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->order_by_desc('nroOrden')->find_many();
		}
		
		public static function listarPorFecha($idEmpresa,$fecha){
			//listar clientes por empresa
			$clientes = Cliente::listar($idEmpresa);
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			if(count($clientes) == 0){
				return array();
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where('fechaInicio', $fecha)->order_by_desc('nroOrden')->find_many();
		}
		
		public static function listarSinAsignarPorFecha($idEmpresa,$fecha){
			//listar clientes por empresa
			$clientes = Cliente::listar($idEmpresa);
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			if(count($clientes) == 0){
				return array();
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where('fechaInicio', $fecha)->where('idEstadoTarea', 1)
			->order_by_desc('nroOrden')->find_many();
		}
		
		public static function listarPendientesPorFecha($idEmpresa,$fecha){
			//listar clientes por empresa
			$clientes = Cliente::listar($idEmpresa);
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			if(count($clientes) == 0){
				return array();
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where('fechaInicio', $fecha)->where('idEstadoTarea', 4)
			->order_by_desc('nroOrden')->find_many();
		}
		
		public static function getCantSinAsignarPorFecha($idEmpresa,$fecha){
			//listar clientes por empresa
			$clientes = Cliente::listar($idEmpresa);
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			if(count($clientes) == 0){
				return 0;
			}
			foreach ($clientes as $cli) {
			$idClientes[$i]=$cli->idCliente;
			$i++;
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where('fechaInicio', $fecha)->where('idEstadoTarea', 1)
			->order_by_desc('nroOrden')->count();	
		}
		
		public static function listarPorTecnico($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)
			->where('idEstadoTarea', 4)->order_by_desc('nroOrden')->find_many();
		}
		
		
		public static function listarPorTecnicoTareaActiva($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)
			->where_in('idEstadoTarea', array(2,6))->order_by_desc('nroOrden')->find_many();
		}
		
		
		public static function getCantTareasPorTecnicoEstadoTarea($idTecnico,$estados){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', $estados)->count();
		}
		
		public static function listarCantTareasAsignadasPorTecnico($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', array(4))->count();
		}
		
		// REVISAR!!!!
		public static function listarCantTareasAceptadasPorTecnico($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', array(2,6))->count();
		}
		
		public static function listarCantTareasAsignadasAceptasPorTecnico($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', array(2,6,4))->count();
		}

		public static function listarTareasAsignadasPorTecnico($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', array(4,2))
			->order_by_asc('idTarea')->find_many();
		}
		
		public static function listarCantTareasPorTecnicoPorEstado($idTecnico, $fechaIni,$fechafin,$idEstadoTarea){
			$tareas = Model::factory('tarea')->where_in('idTecnico', $idTecnico)
			->where_in('idEstadoTarea', $idEstadoTarea)->find_many();
			$cantTareas = 0;
		
			foreach($tareas as $t){
				
					$fecha1 = 	$t->fechaInicio;
				    $fecha2 = 	$t->fechaFin ;
					if ($fecha1 == null) {
						$fecha1 = $fechaIni;				
					}	
		            
					if ($fecha2 == null) {
						$fecha2 = $fechafin;				
					}
						
						
					$comp_fech=tarea::compara_fechas($fecha1,$fechaIni) ;
					if ($comp_fech >=0)	{
						//"$f1 es mayor  o igual que $f2 <br>"
						$comp_fech=tarea::compara_fechas($fecha2,$fechafin) ;
						if ($comp_fech <= 0)	{
						//"$f1 es menor o igual  que $f2 <br>"
							$cantTareas = $cantTareas + 1;
						}
					}
			}
			return $cantTareas;
		}
		
		public static function listarCantTareasPendientesPorTecnico($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', array(4))->count();
		}
/*		// REVISAR!!!!!
		public static function listarCantTareasAsignadasPorTecnico($idTecnico){
			return Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', array(2,4,6))->count();
		}
*/
		public static function getTiempoTareasAsignadasPorTecnico($idTecnico){
			$tareas = Model::factory('tarea')->where('idTecnico', $idTecnico)->where_in('idEstadoTarea', array(2,4,6))->find_many();
			$tiempoTareas = 0;
			foreach($tareas as $t){
				$tiempoTareas = $tiempoTareas + $t->tipoTarea()->find_one()->duracion;
			}
			return $tiempoTareas;
		}
		
		public static function getTiempoTareasPorTecnico($idTecnico,$fecha){
			$tareas = Model::factory('tarea')->where('idTecnico', $idTecnico)->where('fechaInicio', $fecha)
			->where_in('idEstadoTarea', array(2,3,4,6))->find_many();
			$tiempoTareas = 0;
			foreach($tareas as $t){
				$tiempoTareas = $tiempoTareas + $t->tipoTarea()->find_one()->duracion;
			}
			return $tiempoTareas;
		}
		
		public static function listarInicioFin($idEmpresa,$inicio,$fin,$fecha, $campoBusqueda, $valorBusqueda){
			//listar clientes por empresa
			$clientes = null;
			if($campoBusqueda!=null && $valorBusqueda!=null){
				$clientes = Cliente::listarInicioFin($idEmpresa, 0, 1, $campoBusqueda, $valorBusqueda);	
			}else{
				$clientes = Cliente::listar($idEmpresa);	
			}
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			if(count($clientes) == 0){
				return array();
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where('fechaInicio', $fecha)->order_by_desc('idTarea')
			->limit($fin)->offset($inicio)->find_many();
		}
		
		public static function listarInicioFinFechaDistinta($idEmpresa,$inicio,$fin,$fecha, $campoBusqueda, $valorBusqueda){
			//listar clientes por empresa
			$clientes = null;
			if($campoBusqueda!=null && $valorBusqueda!=null){
				$clientes = Cliente::listarInicioFin($idEmpresa, 0, 1, $campoBusqueda, $valorBusqueda);	
			}else{
				$clientes = Cliente::listar($idEmpresa);	
			}
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			if(count($clientes) == 0){
				return array();
			}
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where_not_equal('fechaInicio', $fecha)->order_by_desc('idTarea')
			->limit($fin)->offset($inicio)->find_many();
			
		}
		
		public static function getCantRows($idEmpresa,$fecha){
			//listar clientes por empresa
			$clientes = Cliente::listar($idEmpresa);
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			if(count($clientes) == 0){
				return 0;
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where('fechaInicio', $fecha)->count();
		}

		public static function getCantRowsxEstado($idEmpresa,$fechaIni,$fechafin,$idEstado,$idCliente){
			//listar clientes por empresa
			if ($idEstado == 0 ) {
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->find_many();
			}else{
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->where('idEstadoTarea', $idEstado)->find_many();
			}
			
			
			$cantTareas = 0;
		
			foreach($tareas as $t){
	
					$fecha1 = 	$t->fechaInicio;
				    $fecha2 = 	$t->fechaFin ;
					if ($fecha1 == null) {
						$fecha1 = $fechaIni;				
					}	
		            
					if ($fecha2 == null) {
						$fecha2 = $fechafin;				
					}	
	
					$comp_fech=tarea::compara_fechas($fecha1,$fechaIni) ;

					if ($comp_fech >=0)	{
						//"$f1 es mayor  o igual que $f2 <br>"
						$comp_fech=tarea::compara_fechas($fecha2,$fechafin) ;
						if ($comp_fech <= 0)	{
						//"$f1 es menor o igual  que $f2 <br>"
							$cantTareas = $cantTareas + 1;
						}
					}
			}
			return $cantTareas;
			
			
			

		}


		public static function getCantRowsxEstadoSumarizadoxDia($idEmpresa,$fechaIni,$fechafin,$idEstado,$idCliente,$dia){
			//listar clientes por empresa
			if ($idEstado == 0 ) {
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->find_many();
			}else{
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->where('idEstadoTarea', $idEstado)->find_many();
			}
			
			
			$cantTareas = 0;
		
			foreach($tareas as $t){
					$fecha1 = 	$t->fechaInicio;
				    $fecha2 = 	$t->fechaFin ;
					if ($fecha1 == null) {
						$fecha1 = $fechaIni;				
					}	
		            
					if ($fecha2 == null) {
						$fecha2 = $fechafin;				
					}	
									
					$comp_fech=tarea::compara_fechas($fecha1,$fechaIni) ;
					if ($comp_fech >=0)	{
						//"$f1 es mayor  o igual que $f2 <br>"
						$comp_fech=tarea::compara_fechas($fecha2,$fechafin) ;
						if ($comp_fech <= 0)	{
						//"$f1 es menor o igual  que $f2 <br>"
							list($dia_mes,$mes1,$año1)=explode("/",$fecha1);
							$diaSemana = tarea::diaSemana($año1, $mes1, $dia_mes);
							if ($diaSemana == $dia )  {
								$cantTareas = $cantTareas + 1;
							}
						}
					}
			}
			return $cantTareas;
		}


		public static function getCantRowsxEstadoSumarizadoxSemana($idEmpresa,$fechaIni,$fechafin,$idEstado,$idCliente,$Semana){
			//listar clientes por empresa
			if ($idEstado == 0 ) {
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->find_many();
			}else{
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->where('idEstadoTarea', $idEstado)->find_many();
			}
			
			
			$cantTareas = 0;
		
			foreach($tareas as $t){
					$fecha1 = 	$t->fechaInicio;
				    $fecha2 = 	$t->fechaFin ;
					if ($fecha1 == null) {
						$fecha1 = $fechaIni;				
					}	
		            
					if ($fecha2 == null) {
						$fecha2 = $fechafin;				
					}	
									
					$comp_fech=tarea::compara_fechas($fecha1,$fechaIni) ;
					if ($comp_fech >=0)	{
						//"$f1 es mayor  o igual que $f2 <br>"
						$comp_fech=tarea::compara_fechas($fecha2,$fechafin) ;
						if ($comp_fech <= 0)	{
						//"$f1 es menor o igual  que $f2 <br>"
							list($dia_mes,$mes1,$año1)=explode("/",$fecha1);

							If ($Semana == 1){
								if ($dia_mes <=7 ){
									$cantTareas = $cantTareas + 1;
								}
							}
							
							If ($Semana == 2){
								if ($dia_mes <=15){
									if ($dia_mes > 7 ){	
										$cantTareas = $cantTareas + 1;
									}
								}
							}
							
							If ($Semana == 3){
								if ($dia_mes <=23 ){
									if ($dia_mes > 15 ){		
										$cantTareas = $cantTareas + 1;
									}
								}
							}
							
							If ($Semana == 4){
								if ($dia_mes <=31 ){
									if ($dia_mes > 23 ){
										$cantTareas = $cantTareas + 1;
									}
								}
							}
							
							
						}
					}
			}
			return $cantTareas;
		}


		public static function getCantRowsxEstadoSumarizadoxMes($idEmpresa,$fechaIni,$fechafin,$idEstado,$idCliente,$mes){
			//listar clientes por empresa
			if ($idEstado == 0 ) {
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->find_many();
			}else{
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->where('idEstadoTarea', $idEstado)->find_many();
			}
			
			
			$cantTareas = 0;
		
			foreach($tareas as $t){
					$fecha1 = 	$t->fechaInicio;
				    $fecha2 = 	$t->fechaFin ;
					if ($fecha1 == null) {
						$fecha1 = $fechaIni;				
					}	
		            
					if ($fecha2 == null) {
						$fecha2 = $fechafin;				
					}	
									
					$comp_fech=tarea::compara_fechas($fecha1,$fechaIni) ;
					if ($comp_fech >=0)	{
						//"$f1 es mayor  o igual que $f2 <br>"
						$comp_fech=tarea::compara_fechas($fecha2,$fechafin) ;
						if ($comp_fech <= 0)	{
						//"$f1 es menor o igual  que $f2 <br>"
							list($dia_mes,$mes1,$año1)=explode("/",$fecha1);

							If ($mes1 == $mes){
								$cantTareas = $cantTareas + 1;
							}
						}
					}
			}
			return $cantTareas;
		}


		public static function getCantRowsxEstadoSumarizadoxAnio($idEmpresa,$fechaIni,$fechafin,$idEstado,$idCliente,$anio){
			//listar clientes por empresa
			if ($idEstado == 0 ) {
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->find_many();
			}else{
				$tareas = Model::factory('tarea')->where_in('idCliente', $idCliente)->where('idEstadoTarea', $idEstado)->find_many();
			}
			
			
			$cantTareas = 0;
		
			foreach($tareas as $t){
					$fecha1 = 	$t->fechaInicio;
				    $fecha2 = 	$t->fechaFin ;
					if ($fecha1 == null) {
						$fecha1 = $fechaIni;				
					}	
		            
					if ($fecha2 == null) {
						$fecha2 = $fechafin;				
					}	
									
					$comp_fech=tarea::compara_fechas($fecha1,$fechaIni) ;
					if ($comp_fech >=0)	{
						//"$f1 es mayor  o igual que $f2 <br>"
						$comp_fech=tarea::compara_fechas($fecha2,$fechafin) ;
						if ($comp_fech <= 0)	{
						//"$f1 es menor o igual  que $f2 <br>"
							list($dia_mes,$mes1,$año1)=explode("/",$fecha1);
	
							If ($año1 == $anio){
								$cantTareas = $cantTareas + 1;
							}
						}
					}
			}
			return $cantTareas;
		}

	
		public static function getCantRowsFechaDistinta($idEmpresa,$fecha){
			//listar clientes por empresa
			$clientes = Cliente::listar($idEmpresa);
			$idClientes = array();
			$i = 0;
			//recorrer clientes y agregar los ids a una colleccion
			foreach ($clientes as $cli) {
    			$idClientes[$i]=$cli->idCliente;
				$i++;
			}
			if(count($clientes) == 0){
				return array();
			}
			return Model::factory('tarea')->where_in('idCliente', $idClientes)->where_not_equal('fechaInicio', $fecha)->count();
		}
		
		public static function buscarTarea($idTarea){
			return Model::factory('tarea')->where('idTarea', $idTarea)->find_one();
		}
		
		public static function buscarTareaPorNroOrden($nroOrden){
			return Model::factory('tarea')->where('nroOrden', $nroOrden)->find_one();
		}
		
		public static function buscarTareaPorEstado($idEstado){
			return Model::factory('tarea')->where('idEstadoTarea', $idEstado)->find_one();
		}
		
		//Solo utilizar para actualizar la tarea a No asignada, Asignada, Finalizada.
		//Para rechazada utilizar la clase TareaRechazada
		public static function actualizarTarea($idTarea,$estadoTarea){
			$tarea = Model::factory('tarea')->where('idTarea', $idTarea)->find_one();
			$tarea->idEstadoTarea = $estadoTarea;
			$tarea->save();
			return true;
		}
	
		//Solo utilizar para actualizar la tarea a No asignada, Asignada, Finalizada.
		//Para rechazada utilizar la clase TareaRechazada
		public static function actualizarInicioTarea($idTarea,$FechaIniTarea){
			$tarea = Model::factory('tarea')->where('idTarea', $idTarea)->find_one();
			$tarea->fechaInicioTarea = $FechaIniTarea;
			$tarea->save();
			return true;
		}


		public static function actualizarFinTarea($idTarea,$Fechafin){
			$tarea = Model::factory('tarea')->where('idTarea', $idTarea)->find_one();
			$tarea->fechaFin = $Fechafin;
			$tarea->save();
			return true;
		}	

		public static function borrarTarea($idTarea){
			TareaRechazada::borrarTareasRechazadasPorTarea($idTarea);	
			$tarea = Model::factory('tarea')->where('idTarea', $idTarea)->find_one();
			$tarea->delete();
		}
		
	}

?>